#include "stm32f10x.h"                  // Device header
#include "PID.h"
#include "IR.h"

/*不使用中断的光电传感器初始化*/
//uint8_t GetNFlag1,GetLFlag1,GetNFlag2,GetLFlag2,GetNFlag3,GetLFlag3,GetNFlag4,GetLFlag4;

//void PhotoelectricSensor_Init()
//{
//	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
//	
//	GPIO_InitTypeDef GPIO_InitStructure;
//	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
//	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12;
//	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
//	GPIO_Init(GPIOB,&GPIO_InitStructure);
//}

//void PhotoelectricSensor_Start()
//{
//	GetLFlag1=GetNFlag1;
//	GetNFlag1=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0);
//	GetLFlag2=GetNFlag2;
//	GetNFlag2=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10);
//	GetLFlag3=GetNFlag3;
//	GetNFlag3=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11);
//	GetLFlag4=GetNFlag4;
//	GetNFlag4=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12);
//	
//	if(GetLFlag1==1&&GetNFlag1==0)
//	{
//		Count1++;
//	}
//	if(GetLFlag2==1&&GetNFlag2==0)
//	{
//		Count2++;
//	}
//	if(GetLFlag3==1&&GetNFlag3==0)
//	{
//		Count3++;
//	}
//	if(GetLFlag4==1&&GetNFlag4==0)
//	{
//		Count4++;
//	}	
//}

//uint16_t PhotoelectricSensor_Get1()
//{
//	return Count1;
//}

//uint16_t PhotoelectricSensor_Get2()
//{
//	return Count2;
//}

//uint16_t PhotoelectricSensor_Get3()
//{
//	return Count3;
//}

//uint16_t PhotoelectricSensor_Get4()
//{
//	return Count4;
//}

/**
  * @brief  使用中断的光电传感器初始化
  * @param  无
  * @retval 无
  */
void PhotoelectricSensor_Init()
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&GPIO_InitStructure);
	
	TIM_InternalClockConfig(TIM4);
	
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;		//时钟分频，选择不分频，此参数用于配置滤波器时钟，不影响时基单元功能
	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;	//计数器模式，选择向上计数
	TIM_TimeBaseInitStructure.TIM_Period = 65536 - 1;				//计数周期，即ARR的值
	TIM_TimeBaseInitStructure.TIM_Prescaler = 720 - 1;				//预分频器，即PSC的值,预分频值为1则TIM1的频率就是总线APB2的频率
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
	TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStructure);
	
	TIM_ICInitTypeDef TIM_ICInitStructure;
	TIM_ICInitStructure.TIM_Channel=TIM_Channel_1;
	TIM_ICInitStructure.TIM_ICFilter=0xF;
	TIM_ICInitStructure.TIM_ICPolarity=TIM_ICPolarity_BothEdge;
	TIM_ICInitStructure.TIM_ICPrescaler=TIM_ICPSC_DIV1;
	TIM_ICInitStructure.TIM_ICSelection=TIM_ICSelection_DirectTI;
	TIM_ICInit(TIM4,&TIM_ICInitStructure);
	
	TIM_SelectInputTrigger(TIM4, TIM_TS_TI1FP1);  // CH1 触发源为 TI1FP1（上升）
	TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_Reset);

	TIM_ICInitStructure.TIM_Channel=TIM_Channel_2;
	TIM_ICInitStructure.TIM_ICFilter=0xF;
	TIM_ICInitStructure.TIM_ICPolarity=TIM_ICPolarity_BothEdge;
	TIM_ICInitStructure.TIM_ICPrescaler=TIM_ICPSC_DIV1;
	TIM_ICInitStructure.TIM_ICSelection=TIM_ICSelection_DirectTI;
	TIM_ICInit(TIM4,&TIM_ICInitStructure);
	
	TIM_SelectInputTrigger(TIM4, TIM_TS_TI2FP2);  // CH1 触发源为 TI1FP2（上升）
	TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_Reset);
	
	TIM_Cmd(TIM4,ENABLE);		
}

int32_t IC_Get1Freq()
{
    int32_t capture = TIM_GetCapture1(TIM4);
    TIM_SetCounter(TIM4, 0);  // 重置计数器
    TIM_SetCompare1(TIM4, 0); // 重置捕获值
    if (capture == 0) return 0; // 避免除零错误
    return 100000 / capture;
}

int32_t IC_Get2Freq()
{
    int32_t capture = TIM_GetCapture2(TIM4);
    TIM_SetCounter(TIM4, 0);  // 重置计数器
    TIM_SetCompare2(TIM4, 0); // 重置捕获值
    if (capture == 0) return 0; // 避免除零错误
    return 100000 / capture;
}
